Tag (Effect)
Service (Effect)を表す一意の識別子
Context (Effect) からService (Effect)を取り出して使用する際に使う
docs
この2つが必要
一意の識別子
Service (Effect)のInterface
Context.Tagを使って定義する例
code:ts
class Random extends Context.Tag("MyRandomService")<
Random,
{ readonly next: Effect.Effect<number> }
() { }
ここで定義したclassのことをTag (Effect)と呼ぶ
new Randomのように書かなくても、Random自体がtagとして機能する
Effect.genの中でyield* Randomのように使える
この2つが必要
識別子: "MyRandomService"
識別子が重複したらどうなるの #??
Service Type: next: Effect.Effect<number>
関数でも定義できる
こっちの方が、ノイズが少なくてわかりやすいと思うmrsekut.icon
Context.GenericTagを使う
Service Typeを定義
code:ts
type Log = (message: string) => Effect.Effect<void>;
Tagを作る
code:ts
const Logger = Context.GenericTag<{
readonly log: Log
}>("Logger");
(少し構造は変わるが)この例だと↓こう書く方が好み
code:ts
const Logger = Context.GenericTag<Log>("Logger");